#ifndef QQMUSIC_H
#define QQMUSIC_H
#include "commonpage.h"
#include "volumetool.h"
#include"musiclist.h"
#include "musicslider.h"
#include"lrcpage.h"
#include <QWidget>
#include <QJsonArray>  // 需要包含 QJsonArray 的头文件
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QPropertyAnimation>
#include<QSqlDatabase>
QT_BEGIN_NAMESPACE
namespace Ui { class QQMusic; }
QT_END_NAMESPACE

class QQMusic : public QWidget
{
    Q_OBJECT

public:
    QQMusic(QWidget *parent = nullptr);
    ~QQMusic();

    //初始化----------------------------------------------------
    void initUI();                  //初始化用户界面
    void initPlayer();              //初始化媒体播放器和播放列表
    void initSQLite();              //初始化数据库
    void initMusicList();           //初始化歌曲列表
    void connectSignalAndSlot();    //链接所有信号和槽

    //播放控制--------------------------------------------------
    void playAllOfCommonPage(CommonPage* commonPage, int index);    //播放指定页面的全部音乐
    void playMusicByIndex_(CommonPage* page, int index);            //通过索引播放特定音乐
    void onPlayAll(PageType pageType);     //响应“播放全部”按钮点击
    void setPlayerVolume(int vomume);      //设置播放音量器
    void setMusicSilence(bool isMuted);    //设置静音状态

    //推荐页面--------------------------------------------------
    QJsonArray randomPiction();     //生成随机推荐图片数据

protected:
    //事件重写--------------------------------------------------
    void mousePressEvent(QMouseEvent *event) override;  //鼠标按下重写
    void mouseMoveEvent(QMouseEvent *event) override;   //鼠标移动重写

private slots:
    //页面切换--------------------------------------------------
    void onBtFormClick(int id);     //页面切换按钮

    //按钮响应槽-------------------------------------------------
    void on_quit_clicked();         //推出按钮
    void on_min_clicked();          //最小化按钮
    void on_volumn_clicked();       //音量按钮
    void on_addLocal_clicked();     //添加本地音乐按钮
    void on_connectDB_clicked();    //链接数据库按钮

    //播放响应槽-------------------------------------------------
    void onPlayUpCliked();          //上一首按钮
    void onPlayDownCliked();        //下一首按钮
    void onPlaybackModeCliked();    //播放模式按钮
    void onPlayStateChanged();      //播放状态改变处理
    void onPlayMusic();             // 播放/暂停按钮响应
    void onPlaybackModeChanged(QMediaPlaylist::PlaybackMode playbackMode);  //播放模式变化处理

    //进度与数据元-----------------------------------------------
    void onDurationChanged(qint64 duration);    //媒体市场变化
    void onPositionChanged(qint64 duration);    //播放位置变化
    void onMusicSliderChanged(float value);     //进度条值变化
    void onMetaDataAvailableChangedChanged(bool available);     //元数据可用性变化

    //喜欢页面---------------------------------------------------
    void onUpdateLikeMusic(bool isLike, QString musicId);       //更新歌曲收藏状态

    //列表与歌词-------------------------------------------------
    void onCurrentIndexChanged(int index);      //当前播放索引变化
    void onLrcWordClicked();                    //歌词点击事件

private:
    Ui::QQMusic *ui;        //用户界面指针
    QPoint dragPosition;    //窗口拖动位置记录
    MusicList musicList;    //音乐列表管理
    VolumeTool* volumeTool; //音量控制工具
    QMediaPlayer* player;   //媒体播放器
    QMediaPlaylist* playList;//播放列表
    CommonPage* curPage;    //当前显示页面
    int currentIndex;       //当前播放索引
    LrcPage* lrcPage;       //歌词页面
    qint64 totalDuration ;  //总时长记录
    QPropertyAnimation* lrcAnimation;   //歌词动画效果

    //数据库---------------------------------------------------
    QSqlDatabase sqlite;
};
#endif // QQMUSIC_H
